package 设计mos.builder;

import java.util.ArrayList;
import java.util.List;

/**
 * @作者：xie
 * @时间：2022/10/9 21:55
 * Builder设计模式又叫创建者模式。简单来说，就是一步步创建一个对象，它对用户屏蔽了里面构建的细节，
 * 但是却可以精细的控制对象的构造过程。
 *
 * 简单来说一下，我对这个概念的理解。在面向对象思维中，我们肯定是先创建对象，拥有了对象之后，
 * 我们在一步步的往对象中填充具体的属性。
 *
 * 而Builder的设计模式，是先创建对象中的属性，然后再构建对象。整个对象的创建过程逆了过来

 */
//生成器模式
public class main {
    public static void main(String[] args) {
        Director director = new Director();
        Builder1 builder1 = new Builder1();
        director.Construct(builder1);
        Product product1 = builder1.getResult();
        product1.show();


        Builder1 builder2 = new Builder1();
        director.Construct(builder2);
        Product product2 = builder2.getResult();
        product2.show();
    }
}

class Director{
    public void  Construct(Builder builder){
        builder.BuildPart();
    }
}

abstract class Builder{
    public abstract void BuildPart();
    public abstract Product getResult();
}
class Builder1 extends Builder{
    Product product =new Product();
    @Override
    public void BuildPart() {
        product.Add("A");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

class Product{
    List<String> parts= new ArrayList<String>();
    void Add(String part){
        parts.add(part);
    }

     void show(){
        System.out.println("产品的组成： ");
        for (String s :parts)
            System.out.println(s+" ");
    }
}


